using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._IndoorsTools
{
    /// <summary>
    /// <para>Create Indoor Dataset</para>
    /// <para>Creates an indoor dataset containing the necessary feature classes to maintain floor plan data using a streamlined schema that conforms to the ArcGIS Indoors Information Model. The indoor dataset can be used for visualizing, analyzing, and editing indoor data.</para>
    /// <para>创建一个包含必要要素类的室内数据集，以使用符合 ArcGIS Indoors 信息模型的简化方案来维护楼层平面图数据。室内数据集可用于可视化、分析和编辑室内数据。</para>
    /// </summary>    
    [DisplayName("Create Indoor Dataset")]
    public class CreateIndoorDataset : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public CreateIndoorDataset()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_target_gdb">
        /// <para>Target Geodatabase</para>
        /// <para>The target file or enterprise geodatabase that will contain the output indoor dataset.</para>
        /// <para>将包含输出室内数据集的目标文件或企业级地理数据库。</para>
        /// </param>
        /// <param name="_indoor_dataset_name">
        /// <para>Indoor Dataset Name</para>
        /// <para>The unique name of the output indoor dataset. The default is Indoor.</para>
        /// <para>输出室内数据集的唯一名称。默认值为 Indoor。</para>
        /// </param>
        /// <param name="_spatial_reference">
        /// <para>Coordinate System</para>
        /// <para>The spatial reference of the output indoor dataset.</para>
        /// <para>输出室内数据集的空间参考。</para>
        /// </param>
        public CreateIndoorDataset(object _target_gdb, object _indoor_dataset_name, object _spatial_reference)
        {
            this._target_gdb = _target_gdb;
            this._indoor_dataset_name = _indoor_dataset_name;
            this._spatial_reference = _spatial_reference;
        }
        public override string ToolboxName => "Indoors Tools";

        public override string ToolName => "Create Indoor Dataset";

        public override string CallName => "indoors.CreateIndoorDataset";

        public override List<string> AcceptEnvironments => ["configKeyword", "workspace"];

        public override object[] ParameterInfo => [_target_gdb, _indoor_dataset_name, _spatial_reference, _output_dataset];

        /// <summary>
        /// <para>Target Geodatabase</para>
        /// <para>The target file or enterprise geodatabase that will contain the output indoor dataset.</para>
        /// <para>将包含输出室内数据集的目标文件或企业级地理数据库。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Target Geodatabase")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _target_gdb { get; set; }


        /// <summary>
        /// <para>Indoor Dataset Name</para>
        /// <para>The unique name of the output indoor dataset. The default is Indoor.</para>
        /// <para>输出室内数据集的唯一名称。默认值为 Indoor。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Indoor Dataset Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _indoor_dataset_name { get; set; }


        /// <summary>
        /// <para>Coordinate System</para>
        /// <para>The spatial reference of the output indoor dataset.</para>
        /// <para>输出室内数据集的空间参考。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Coordinate System")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _spatial_reference { get; set; }


        /// <summary>
        /// <para>Output Dataset</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _output_dataset { get; set; }


        public CreateIndoorDataset SetEnv(object configKeyword = null, object workspace = null)
        {
            base.SetEnv(configKeyword: configKeyword, workspace: workspace);
            return this;
        }

    }

}